package com.tac.controller;

import com.tac.common.result.Result;
import com.tac.common.thread.Thread;
import com.tac.pojo.User;
import com.tac.pojo.vo.Page;
import com.tac.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List;

@RestController
@RequestMapping("/user")
@CrossOrigin
@Api(value = "用户管理",tags ="用户管理" )
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 登录
     * @param user
     * @return
     */
    @ApiOperation("用户登录")
    @PostMapping("/login")
    public Result<User> login(@Valid @RequestBody User user){
        Result<User> login = userService.login(user);
        return login;
    }

    /**
     * 退出登录
     * @param token
     * @return
     */
    @PostMapping("/logout")
    public Result logout(@RequestHeader String token){
        return userService.logout(token);
    }

    /**
     * 注册
     * @param user
     * @return
     */
    @PostMapping("/register/{code}")
    @ApiOperation("注册")
    public Result<User> rigister(@Valid @RequestBody User user,@PathVariable Integer code){
       return userService.rigister(user,code);
    }

    /**
     * 发送验证码
     * @return
     */
    @PostMapping("/code")
    @ApiOperation("注册的验证码")
    public Result<Integer> code(@Valid @RequestBody User user){
        return userService.code(user);
    }
    /**
     * 充值         还要加入充值表还没写
     * @return
     */
    @ApiOperation("用户充值接口")
    @PostMapping("/recharge")
    public Result recharge(BigDecimal money){
       return userService.Recharge(money);
    }

    @ApiOperation("上传头像")
    @PostMapping("/updateByImg")
    public Result updateByImg(MultipartFile file){
        return userService.updateByImg(file);
    }

    /**
     * 根据id修改密码
     * @param
     * @return
     */
    @ApiOperation("根据id修改密码")
    @PutMapping
    public Result updatePwdByid(@RequestBody User user){
        return userService.updatePwdByid(user.getPassword());
    }
    //-----------------------------------------------------------------------------最后用aop统一验证是不是管理员账户
    /**
     * 查看所有用户
     * @return
     */
    @ApiOperation("查看所有用户分页")
    @GetMapping("/selectAll")
    public Result<Page<List<User>>> selectAll(int page, int limit){
        return userService.selectAll(page,limit);
    }
    /**
     * 管理员添加用户
     * @param user
     * @return
     */
    @ApiOperation("管理员添加用户")
    @PostMapping("createrUser")
    public Result createrUser(@RequestBody User user){
        return userService.createrUser(user);
    }
    /**
     * 修改用户信息
     * @param user
     * @return
     */
    @ApiOperation("管理员修改用户信息可以修改余额")
    @PutMapping("updateByid")
    public Result updateByid(@RequestBody User user){
       return userService.updateByid(user);
    }
    /**
     * 修改用户状态 停用启用删除
     * @param
     * @return
     */
    @PutMapping("/updateStatus")
    @ApiOperation("管理员修改用户状态 1")
    public Result updateByid(Integer id,Integer status) {
        return userService.updateByid(id, status);
    }

}
